home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload Trio 2 / Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO / dir43 / med300.zip / MEMOEDIT.DOC < prev    next >
Text File  |  1994-02-22  |  22KB  |  668 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.                          MemoEdit 3.00 for CDD
  15.  
  16.                  Copyright (C) 1994, by Bobcat Systems
  17.                           All Rights Reserved
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.                              Bobcat Systems
  48.                               PO Box 1195
  49.                            Ossining, NY 10562
  50.  
  51.             Information & Technical Support: (914)-762-2374
  52.                                     Fax/BBS: (914)-923-9335
  53.                                  CompuServe: [70441,204]
  54.  
  55.  
  56.  
  57.  
  58.            "O woe unto thee, for developing in CDD..." - Anon
  59.  
  60.  
  61. 1.0  LICENSE AND WARRANTY
  62. -------------------------
  63.  
  64.   MemoEdit is copyrighted material, (C) Bobcat Systems.  You are granted
  65.   a limited license to MemoEdit under the following terms and
  66.   conditions:
  67.  
  68.     (1)  You may modify MemoEdit and incorporate into your applications
  69.          free of charge.
  70.  
  71.     (2)  You may freely distribute unmodified versions of the MemoEdit
  72.          source code to others.
  73.  
  74.     (3)  You may not distribute modified versions of the source code to
  75.          others without the express written consent of Bobcat Systems.
  76.  
  77.   This software is provided without warranties of any kind, either
  78.   express or implied.  In no event will Bobcat Systems be liable to you
  79.   for any damages incurred by its use.
  80.  
  81.  
  82. 2.0  OVERVIEW
  83. -------------
  84.  
  85.   MemoEdit provides memo and ASCII file editing capabilities in Clarion
  86.   3.0 applications.  The following features are currently implemented:
  87.  
  88.     * Editing keys based on Clarion Editor
  89.     * Real-time paragraph reformatting and text reflow
  90.     * Word-by-word movement
  91.     * Character-oriented block operations, similar to Clarion Editor
  92.     * ASCII file import/export
  93.     * Ability to use standard Clarion format memos
  94.  
  95.   Keep in mind that MemoEdit is not meant to be a full-scale word
  96.   processor; its aims are modest.
  97.  
  98.   If you need high-end word processing features (e.g. spellcheck,
  99.   bold/underline/italic, search/replace, WordPerfect import/export,
  100.   etc.), in your applications you should consider SuperMemo 3.0, our
  101.   commercial word processing add-on for CDD applications.  Please
  102.   contact us for details.
  103.  
  104.  
  105. 3.0  PACKING LIST
  106. -----------------
  107.  
  108.   MEMOEDIT.DEC - MemoEdit global variable declarations
  109.   MEMOEDIT.EQU - MemoEdit equates
  110.   MEMOEDIT.MOD - MemoEdit procedure prototypes
  111.  
  112.   MEDUMMY.CLA  - INCLUDE() code for Generator dummy fields
  113.  
  114.   MEMEDTST.APP - A rudimentary CDD Generator example app using MemoEdit
  115.   MEMEDTST.DCT - "
  116.   MEMEDTST.HLP - "
  117.   MEMEDTST.PR  - "
  118.   LETTERS.*    - "
  119.  
  120.   MEMOEDIT.PR  - Project file
  121.   MEMOEDIT.CLA - Global library
  122.  
  123.   MEBLOCK.CLA  - Block operations
  124.   MECORE.CLA   - Core editing
  125.   MEDELETE.CLA - Text deletion
  126.   MEDONE.CLA   - Termination
  127.   MEEDIT.CLA   - Main editing procedure
  128.   MEFILE.CLA   - File-oriented operations
  129.   MEINIT.CLA   - Initialization
  130.   MELINTBL.CLA - Line table handling
  131.   MEPACK.CLA   - Memo packing/unpacking
  132.   MEREFORM.CLA - Reformatting
  133.   MESCRDEF.CLA - Screen defaults
  134.   MESCREEN.CLA - Screen handling
  135.   MEUTIL.CLA   - Utility functions
  136.   MEWORD.CLA   - Word-by-word movement
  137.  
  138.   CLMEM.OBJ    - Object file for 'C' style memory allocation
  139.   CLMEM.A      - Source for above in TopSpeed assembler format
  140.  
  141.  
  142. 4.0  BUILD THE LIBRARIES
  143. ------------------------
  144.  
  145.   MemoEdit is implemented as a Clarion Library.  The entire library is
  146.   Clarion source, with the exception of the file CLMEM.OBJ, which is a
  147.   TopSpeed Assembler object file.  (We supply the OBJ file so you don't
  148.   need to purchase the TopSpeed TechKit just to recompile the libary.)
  149.  
  150.   The project file which builds the library is MEMOEDIT.PR.  You need to
  151.   build a library for each for each memory model (Static, Overlay,
  152.   Protected) and DLL/non-DLL setting you will be using with your apps.
  153.  
  154.   The project file uses the %clapfx% macro to automatically generate
  155.   unique library names for each memory model:
  156.  
  157.     DDVMEMED.LIB - Overlay w/DLL model library
  158.     DESMEMED.LIB - Extended w/DLL   "     "
  159.     DEVMEMED.LIB - Extended non-DLL "     "
  160.     DOVMEMED.LIB - Overlay  non-DLL "     "
  161.     DXVMEMED.LIB - Static           "     "
  162.  
  163.     DDVMEMED.DLL - Overlay model  DLL
  164.     DESMEMED.DLL - Extended model DLL
  165.  
  166.  
  167. 5.0  RUN THE DEMO APPLICATION
  168. -----------------------------
  169.  
  170.   Before attempting to integrate MemoEdit into your own applications, be
  171.   sure to generate, compile, and run MEMEDTST.APP, the demo application.
  172.  
  173.  
  174. 6.0  USING MEMOEDIT
  175. -------------------
  176.  
  177. 6.1  EDITING KEYS
  178.  
  179.   The following editing keys are implemented:
  180.  
  181.     Up arrow    - Standard Clarion Editor cursor navigation keys
  182.     Down arrow  - "
  183.     Left arrow  - "
  184.     Right arrow - "
  185.     Home        - "
  186.     End         - "
  187.     PgUp        - "
  188.     PgDn        - "
  189.     Ctrl-PgUp   - "
  190.     Ctrl-PgDn   - "
  191.  
  192.     Ctrl-Left   - Move to previous word
  193.     Ctrl-Right  - Move to next word
  194.  
  195.     Ctrl-Home   - Erase entire line
  196.     Ctrl-End    - Erase to end of line
  197.  
  198.     Ctrl-M      - Move text block
  199.     Ctrl-C      - Copy text block
  200.     Ctrl-D      - Delete text block
  201.  
  202.     Ctrl-G      - Insert text file at cursor
  203.     Ctrl-P      - Copy marked block to text file
  204.  
  205.     Ctrl-O      - Toggle format code display on/off
  206.  
  207.  
  208. 6.2  FEATURES
  209.  
  210.   DYNAMIC PARAGRAPH FORMATTING - MemoEdit automatically wordwraps and
  211.     reflows text into paragraphs as you insert or delete characters.
  212.  
  213.   BLOCK OPERATIONS - MemoEdit supports Block Copy, Block Move, and Block
  214.     Delete functions.  They behave in the same way as those in the
  215.     Clarion Editor.
  216.  
  217.   'HARD' CARRIAGE RETURNS - MemoEdit supports 'hard' carriage returns,
  218.     allowing better control of the paragraph formatting process.  When
  219.     you press the <Enter> key, a code of hex FF will be inserted into
  220.     the memo.  The paragraph reformatting functions will stop flowing
  221.     text lines together when this code is encountered.
  222.  
  223.    SHOW/HIDE FORMAT CODES - Pressing <Ctrl-O> will toggle the display of
  224.      formatting codes. The only formatting code currently used is the
  225.      'hard' carriage return described above.  It will display as a ''
  226.      character.
  227.  
  228.  
  229. 6.3  MEMOEDIT HELP SCREEN
  230.  
  231.   A Clarion Help screen listing the default key assignments used in
  232.   MemoEdit is included in the file MEMEDTST.HLP, supplied on the
  233.   distribution disk.  You can use the Clarion Help utility to copy the
  234.   screen into your application's help file.
  235.  
  236.  
  237. 6.4  INSERTING ARBITRARY TEXT AT THE CURSOR POSITION
  238.  
  239.   At any time, you may use the SM_InsTxt() function to insert an
  240.   arbitrary amount of text at the cursor position.  For example, you
  241.   could define a hot key which calls a Browse procedure listing various
  242.   "boilerplate" text the user can insert into the document.
  243.  
  244.   Assume the boilerplate text you wish insert is stored in the string
  245.   'sText'.  The following code would insert the text at the current
  246.   cursor position and display the result:
  247.  
  248.     SM_InsTxt(MED:usPosition, LEN(CLIP(sText)), sText)    ! Insert text
  249.     SM_ReformDoc()                                        ! Reformat document
  250.     SM_ShowPage()                                         ! Redisplay page
  251.  
  252.  
  253. 7.0  KNOWN BUGS AND LIMITATIONS
  254. -------------------------------
  255.  
  256.   1) You may get a duplicate symbol warning for 'TYPE$GUSERDEFS'.  This
  257.      is annoying, but harmless.
  258.  
  259.   2)  The mouse support is somewhat lacking: To edit the memo, you need
  260.       to click on the ME_Dummy field's prompt string.  Clicking on the
  261.       memo area does not work as expected.
  262.  
  263.  
  264. 8.0 INTEGRATING MEMOEDIT INTO YOUR GENERATOR-BASED APPS
  265. -------------------------------------------------------
  266.  
  267.   1) Press Ctrl-O to display the Application Properties screen.  Select
  268.      'Global Settings'.  On the Global Settings screen, select 'Source'
  269.      to display the Embedded Source screen.  Select the 'Inside Global
  270.      MAP' embed point, and enter the following statement:
  271.  
  272.        INCLUDE('MEMOEDIT.MOD')
  273.  
  274.      Press Ctrl-X to return to the Embedded Source screen.
  275.  
  276.   2) Select the 'Data Section' embed point, and enter the following
  277.      statements:
  278.  
  279.        INCLUDE('MEMOEDIT.EQU')
  280.        INCLUDE('MEMOEDIT.DEC')
  281.  
  282.      Now for each file containing a memo, define a string array alias
  283.      over the memo.  The length of the string element should be the same
  284.      as the defined display width of the memo as specified in the Data
  285.      Dictionary.  The product of the STRING size and the DIM attribute
  286.      should be equal to the maximum defined size of the memo.  For
  287.      example, assume the file shown below has a memo of 3800 characters,
  288.      with a defined display width of 76 characters:
  289.  
  290.        LETTERS      FILE,PRE(LET),CREATE,RECLAIM,DRIVER('CLARION')
  291.        ByLetterID     KEY(LET:LetterID),NOCASE,OPT
  292.        LetterText     MEMO(3800)                        ! 3800 characters
  293.        RECORD         RECORD
  294.        LetterID         LONG
  295.        LetterDesc       STRING(40)
  296.                     . .
  297.  
  298.      You would enter the following code in the 'Data Section':
  299.  
  300.        LetMemoGrp   GROUP,OVER(LET:LetterText)          ! Width is 76 and
  301.        LET_Memo       STRING(76),DIM(50)                ! 76 * 50 = 3800
  302.                     .
  303.  
  304.   3) Press Ctrl-X to return to the Embedded Source screen, then select
  305.      'Exit' to return to the Global Settings screen.
  306.  
  307.   4) Select 'Data' from the Global Settings screen.  Press <Ins> to
  308.      create a new data element.  Create a data element called 'ME_Dummy'
  309.      of type 'STRING', length '1', and a display picture of 'P*P'.
  310.      Press Ctrl-X, and 'Ok' twice to return to the Procedure Worksheet.
  311.  
  312.   5) For each form which allows the user to edit a memo, press <Enter>
  313.      to display the Procedure Properties screen, then select 'Source' to
  314.      display the Embedded Source screen.  There are 3 embed points which
  315.      need code inserted as follows:
  316.  
  317.        a) 'Setup Screen' embed point:
  318.  
  319.           DISPLAY                                           ! Display screen
  320.           ME_InitMemo( xxx_Memo )                           ! Initialize memo
  321.           ME_ScrnDefs(ROW(?ME_Dummy)+1, COL(?ME_Dummy)+1,|  ! Set screen area
  322.             rows, cols)                                     !
  323.  
  324.           (you can insert code to override defaults here - see Document
  325.            Variables section)
  326.  
  327.           ME_Pack( xxx_Memo )                               ! Pack the memo
  328.           ME_ShowPage()                                     ! Display memo
  329.  
  330.           WHERE: 'xxx' is the file prefix, and 'rows' and 'cols' are the
  331.                  rows and columns in the memo editing area.
  332.  
  333.           NOTE:  'rows' and 'cols' need not be the same as the size
  334.                   defined in the Data Dictionary definition.  If the
  335.                   width is different the text will automatically be
  336.                   rewrapped to fit.
  337.  
  338.        b) 'Before File I/O' embed point:
  339.  
  340.           ME_Unpack( xxx_Memo, SIZE(xxx_Memo[1]))  ! Unpack memo before saving
  341.  
  342.           WHERE: 'xxx' is the file prefix
  343.  
  344.        c) 'End of Procedure' embed point:
  345.  
  346.           ME_Done()                                ! Clean-up memory
  347.  
  348.   6) For each form which allows the user to edit a memo, place the
  349.      'ME_Dummy' field on the screen layout.  The field should be placed
  350.      immediately above and to the left of the position at which you want
  351.      the upper left-hand corner of the memo editing area to be located.
  352.      On the Entry Field Properties screen, select the 'When Screen Field
  353.      is Completed' Source button and enter the following statement:
  354.  
  355.        INCLUDE('MEDUMMY.CLA')                      ! Include event loop code
  356.  
  357.    7) On the Project Settings screen, select 'Module' and add the
  358.       following module as a 'External OBJ/LIB File':
  359.  
  360.         %clapfx%memed.lib
  361.  
  362.  
  363. 9.0  EDITING ASCII FILES
  364. ------------------------
  365.  
  366.   MemoEdit allows editing of ASCII text files as well as Clarion memo
  367.   fields.  The maximum file size that can be edited is limited to
  368.   available memory.  Two procedures to support the editing of ASCII text
  369.   files are provided:
  370.  
  371.     ME_EditFile()   Edits an ASCII text file
  372.     ME_PickFile()   File picklist with directory navigation
  373.  
  374.   Here is an example:
  375.  
  376.     sFileName = ME_PickFile()               ! Let user select a file
  377.     IF sFileName                            ! If selection made
  378.       ME_EditFile( sFileName )              !   Edit the file
  379.     .                                       ! Endif
  380.  
  381.   The default 'Save' and 'Cancel' keys are Ctrl-Enter and Escape,
  382.   respectively.  You can change these by assigning new keycodes to
  383.   the global variables MEU:isFlSaveKey and MEU:isFlCancKey.
  384.  
  385.  
  386. 10.0  TECHNICAL STUFF
  387. ---------------------
  388.  
  389. 10.1  VARIABLE NAMING CONVENTION
  390.  
  391.   In the sections that follow, lowercase letters are used before
  392.   variable names to indicate the variable type:
  393.  
  394.     bb    Boolean Byte    (BYTE  )
  395.     is    Integer Short   (SHORT )
  396.     il    Integer Long    (LONG  )
  397.     q     Queue           (QUEUE )
  398.     s     String          (STRING)
  399.     ub    Unsigned Byte   (BYTE  )
  400.     ul    Unsigned Long   (ULONG )
  401.     us    Unsigned Short  (USHORT)
  402.  
  403.  
  404.  10.2  GLOBAL VARIABLES
  405.  
  406.    The following global variables are available for run-time
  407.    customization:
  408.  
  409.      MEU:sHelpID
  410.  
  411.        Determines the ID of the Help screen which is displayed when F1
  412.        is pressed while editing a memo.  The default value is
  413.        'MEMOEDIT'.
  414.  
  415.     MEU:bbShowStatus
  416.  
  417.       If non-zero, causes a status bar to be displayed on the screen row
  418.       specified by MEU:ubStatus row.  Setting this to zero disables the
  419.       status bar.  The default is to display the status bar.
  420.  
  421.     MEU:ubStatusRow
  422.  
  423.       If MEU:bbShowStatus is non-zero, this variable determines the
  424.       screen row at which to display the status bar.  The default is row
  425.       25.
  426.  
  427.     MEU:bbAlrtBfrCmd
  428.  
  429.       If non-zero, causes ALERTed keys to have priority over built-in
  430.       editing keys in the case of a key conflict.  Setting this to zero
  431.       will cause editing keys to have priority.  The default is for
  432.       ALERTed keys to have priority.
  433.  
  434.     MEU:ubAscImpFmt
  435.  
  436.       Determines the import method when reading an ASCII file into a
  437.       document via Ctrl-G.  There are 3 predefined EQUATE values:
  438.  
  439.         eImpRefNone    !Convert all CR's to hard returns.
  440.  
  441.         eImpRefPart    !Convert 2 or more occurrences of CR's to hard returns.
  442.  
  443.         eImpRefFull    !Ignore CR's and treat text as a stream
  444.  
  445.     MEU:ubAscExpFmt
  446.  
  447.       Determines the export method when writing a marked block to an
  448.       ASCII file via Ctrl-G.  Currently, there are 2 predefined EQUATE
  449.       values:
  450.  
  451.         eExpKillCode             !Strip all format codes
  452.  
  453.         eExpKeepCode             !Keep all codes
  454.  
  455.       In MemoEdit the only format code currently defined is the Hard
  456.       Return (ASCII 255).
  457.  
  458.     MEU:isFlSaveKey
  459.  
  460.       Sets keycode which causes a 'Save and Exit' operation when editing
  461.       a file.  The default keycode is Ctrl-Enter.
  462.  
  463.  
  464.     MEU:isFlCancKey
  465.  
  466.       Sets keycode which causes a 'Cancel' operation when editing a
  467.       file. If the file has been changed the user will be asked to
  468.       confirm before exiting.  The default keycode is Escape.
  469.  
  470.  
  471.     qClipboard
  472.  
  473.       After any block operation, the most recently marked text is stored
  474.       in this queue.  The structure is:
  475.  
  476.         qClipboard   QUEUE,PRE(MEB),EXTERNAL   !Clipboard for block
  477.                        STRING(255)             !operations
  478.                      .
  479.  
  480.  
  481. 10.3  DOCUMENT QUEUE STRUCTURE
  482.  
  483.  
  484.   Each document being edited has an associated record in the global
  485.   queue qDocument with the following structure:
  486.  
  487.  
  488.     qDocument    QUEUE,PRE(MED),EXTERNAL   !Table of document structures:
  489.     ubWndRowOfs    BYTE                    !  Edit window row offset
  490.     ubWndColOfs    BYTE                    !  Edit window column offset
  491.     ubWndRows      BYTE                    !  Edit window rows
  492.     ubWndCols      BYTE                    !  Edit window columns
  493.  
  494.     usLineWidth    USHORT                  !  Line width
  495.  
  496.     ubTextColor    BYTE                    !  Normal text color
  497.     ubSymColor     BYTE                    !  Format code color
  498.     ubBlockColor   BYTE                    !  Block marking color
  499.  
  500.     bbInsertMode   BYTE                    !  Insert/overwrite flag
  501.     bbShowCodes    BYTE                    !  Display format codes flag
  502.  
  503.     bbBlockShow    BYTE                    !  Marked block display flag
  504.     bbBlockMark    BYTE                    !  Block marking mode flag
  505.     isBlockBegin   SHORT                   !  Start of marked text block
  506.     isBlockEnd     SHORT                   !  End of marked text block
  507.  
  508.     bbAllocFlag    BYTE                    !  Buffer allocation flag (*RESERVED*)
  509.     ulEditBuffer   ULONG                   !  Pointer to edit buffer (*RESERVED*)
  510.     usCharacters   USHORT                  !  Current # of chars document
  511.     usMaxChars     USHORT                  !  Max. chars allowed in buffer
  512.     bbHasChanged   BYTE                    !  Edit buffer changed flag
  513.  
  514.     usPageTop      USHORT                  !  Line at current top-of-page
  515.     usLineNdx      USHORT                  !  Current line index
  516.  
  517.     isSkew         SHORT                   !  Horizontal skew increment
  518.  
  519.     usPosition     USHORT                  !  Current point position
  520.     usLineStart    USHORT                  !  Current line start offset
  521.     usLineEnd      USHORT                  !  Current line end offset
  522.                  .
  523.  
  524.  
  525. 10.4  DOCUMENT VARIABLES
  526.  
  527.  
  528.   The following document variables may be overridden after initially
  529.   calling ME_ScrnDefs():
  530.  
  531.     MED:usLineWidth
  532.  
  533.       Determines the word wrap column when editing and displaying text.
  534.       The initial default is set to the size of the editing window, so
  535.       text wraps within the window.  This can be increased to suppress
  536.       wordwrap.  Note that by changing this value, you can cause the
  537.       text to rewrap to any desired column width - the editing window
  538.       does *not* have to be the same width as the defined width of the
  539.       memo field definition.
  540.  
  541.     MED:ubTextColor
  542.  
  543.       Determines the color code used to display normal text.
  544.  
  545.     MED:ubSymColor
  546.  
  547.       Determines the color code used to display format codes when Ctrl-O
  548.       is used.
  549.  
  550.     MED:ubBlockColor
  551.  
  552.       Determines the color code used to mark text blocks during block
  553.       operations.
  554.  
  555.     MED:bbInsertMode
  556.  
  557.       A value of 1 indicates insert mode, while a value of 0 indicates
  558.       overwrite mode.
  559.  
  560.     MED:bbShowCodes
  561.  
  562.       A value of 1 suppresses the display of format codes.  A value of
  563.       zero displays format codes as graphic characters using the color
  564.       code MED:ubSymColor.  In MemoEdit, the only format code is the
  565.       Hard Return, which displays as a '' character.
  566.  
  567.     MED:bbBlockShow
  568.  
  569.       This flag determines whether the text block region determined by
  570.       MED:isBlockBegin and MED:isBlockEnd should be displayed as
  571.       highlighted in the color MED:ubBlockColor.  A value of 1 displays
  572.       the block, while a value of 0 hides the block.
  573.  
  574.     MED:bbBlockMark
  575.  
  576.       This flag turns block marking mode on and off.  A value of 1
  577.       indicates that block marking mode is on, and MED:isBlockEnd should
  578.       be updated as the cursor is moved.  A value of 0 turns off block
  579.       marking mode.
  580.  
  581.     MED:isBlockBegin
  582.  
  583.       Contains the 0-based offset into the edit buffer of the first
  584.       character in the currently marked block.
  585.  
  586.     MED:isBlockEnd
  587.  
  588.       Contains the 0-based offset into the edit buffer of the last
  589.       character in the currently marked block.
  590.  
  591.     MED:usCharacters
  592.  
  593.       This value may be read to determine the current number of
  594.       characters in the edit buffer.  *DO NOT CHANGE THIS VALUE!*
  595.  
  596.     MED:bbHasChanged
  597.  
  598.       This flag indicates whether the contents of the edit buffer have
  599.       since it was initially loaded.
  600.  
  601.     MED:usLineIndex
  602.  
  603.       This value may be read to determine the current document line
  604.       index. *DO NOT CHANGE THIS VALUE!*
  605.  
  606.  
  607. 10.5  USEFUL FUNCTIONS AND PROCEDURES
  608.  
  609.   The following functions are the most commonly used.  Refer to the
  610.   source code for any others:
  611.  
  612.     ME_BuffrFull(), BYTE
  613.  
  614.       Returns 1 if there is no more room to insert characters in the
  615.       buffer.
  616.  
  617.     ME_DelTxt( usDeletePos, usDeleteCount )
  618.  
  619.       Deletes usDeleteCount characters, starting at usDeletePos.
  620.  
  621.     ME_InsTxt( usInsertPos, usStringLength, sTextString )
  622.  
  623.       Inserts the string sTextString into the edit buffer at
  624.       usInsertPos.
  625.  
  626.     ME_Pack( aBuffer, <bbKeepFormat> )
  627.  
  628.       Packs the memo array 'aBuffer' by removing trailing blanks from
  629.       each line.  This effectively converts the standard Clarion format
  630.       memo into a straight stream of text representation which is more
  631.       suited for word processing.  Setting the optional 'bbKeepFormat'
  632.       flag to 1 will append a Hard Return after each line of the memo.
  633.       This will cause lines to break in the same place they would if you
  634.       were using a standard Clarion TEXT field.
  635.  
  636.     ME_PasteClip()
  637.  
  638.       Pastes the contents of qClipboard at the current cursor position.
  639.  
  640.     ME_ReformDoc()
  641.  
  642.       Reformats the entire document.
  643.  
  644.     ME_SetPage()
  645.  
  646.       Invalidates the entire current display page so that a subsequent
  647.       call to ME_ShowPage() will redraw the entire page.
  648.  
  649.     ME_ShowPage()
  650.  
  651.       Refreshes the display, updating only those portions of the screen
  652.       that need to be updated.
  653.  
  654.     ME_Unpack( aMemo, usLineWidth )
  655.  
  656.       Undoes the effects of the ME_Pack() procedure, converting the
  657.       straight stream of text representation back into the Clarion
  658.       fixed-width array format.
  659.  
  660.  
  661. 11.0  QUESTIONS?
  662. ----------------
  663.  
  664.   The source for MemoEdit is fairly well commented, but if you have any
  665.   questions or suggestions feel free to E-Mail me at CIS ID [70441,204]
  666.   or phone (914)-762-2374.
  667.  
  668.